const fp = require('lodash/fp');
const cars = require('./cars');

/**
 * 练习1：使用函数组合 fp.flowRight()重新实现下面这个函数
 */
let isLastInStock = fp.flowRight(fp.prop('in_stock'), fp.last);

const r1 = isLastInStock(cars);

console.log(r1);

/**
 * 练习2：使用 fp.flowRight()、fp.prop()和 fp.first()来获取第一个 car 的 name
 */
const getNameFromFirstCar = fp.flowRight(fp.prop('name'), fp.first);

const r2 = getNameFromFirstCar(cars);

console.log(r2);

/**
 * 练习3：使用帮助函数 _average 重构 averageDollarValue，使用函数组合的方式实现
 */

function _average(xs) {
  return fp.reduce(fp.add, 0, xs) / xs.length;
}
const averageDollarValue = fp.flowRight(
  _average,
  fp.map(car => car.dollar_value)
);

const r3 = averageDollarValue(cars);

console.log(r3);

/**
 * 练习4：使用 flowRight 写一个 sanitizeNames()函数，返回一个下划线连接的小写字符串，把数组中的 name 转换为这种形式：例如：sanitizeNames(["Hello World"]) => ["hello_world"]
 */
let _underscore = fp.replace(/\W+/g, '_');

const sanitizeNames = fp.map(fp.flowRight(_underscore, fp.toLower));

const r4 = sanitizeNames(fp.map(fp.prop('name'), cars));

console.log(r4);
